﻿Public Class FrmBarrios
    Dim acceso As New acceso_a_datos(acceso_a_datos.motores.sqlserver)
    Dim combo As New carga_combo
    Dim dao As New DAOGeneral
    Dim operacion As accion 'estado de la operacion en curso
    Dim ventanaPadre As Form
    Dim vengoDesdeMenuPrincipal As Boolean 'variable q me dice si vengo desde un form o desde el menu ppal
    Dim id_barr As Integer

    Public Sub New(ByRef ventana As Form)
        InitializeComponent()
        Me.ventanaPadre = ventana
        Me.ventanaPadre.Enabled = False
        Me.Focus()
        vengoDesdeMenuPrincipal = False

    End Sub

    Public Sub New()
        InitializeComponent()
        vengoDesdeMenuPrincipal = True
    End Sub

    Enum accion 'tipificacion de estado de la operacion en curso
        insertar
        modificar
    End Enum

    Private Sub FrmBarrios_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.grupo.Text = ""  'setea en blanco el texto del groupbox
        Me.cargarGrilla()
        Me.btnNuevo.Focus()
        Me.operacion = accion.insertar  'setea el estado de la operacion en insertar
        Me.cargarComboLocalidades()
        cmb_localidades.DropDownStyle = ComboBoxStyle.DropDownList 'propiedad del combobox para que no se pueda escribir sobre el
    End Sub

    Private Sub cargarGrilla()
        Dim tabla As New Data.DataTable
        tabla = dao.cargarTablaCompuesta()
        Me.grid_barrio.DataSource = tabla
        Me.grid_barrio.AutoResizeColumns() 'define automaticamente el ancho de las columnas de la grilla conforme al contenido

    End Sub

    Private Sub cmd_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click
        If vengoDesdeMenuPrincipal = True Then 'si vengo desde el menu ppal solo cierro la ventana
            Me.Dispose()
        Else 'si vengo de un form distinto al ppal
            Me.Close()  'cierra el formulario
            ventanaPadre.Enabled = True 'Habilita el form principal
            ventanaPadre.Focus()        'y le hace foco
        End If
    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        If Me.txt_descripcion.Text = "" Then
            Me.lbl_mensaje.ForeColor = Color.Red
            Me.lbl_mensaje.Text = "¡Colocar nombre del barrio!"
            Me.txt_descripcion.Focus()
            Exit Sub
        End If
        If Me.cmb_localidades.SelectedIndex = -1 Then  'valida el campo descripcion
            Me.lbl_mensaje.ForeColor = Color.Red
            Me.lbl_mensaje.Text = "¡Seleccionar la Localidad!"
            Me.cmb_localidades.Focus()
            Exit Sub
        End If

        If Me.operacion = accion.insertar Then  'si la operacion en curso es insertar:
            If dao.GuardarBarrio(Me.txt_descripcion.Text, Me.cmb_localidades.SelectedValue) = True Then
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "Barrio guardado con éxito." 'muestra un mensaje al usuario
            Else
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "El barrio no pudo guardarse" 'muestra un mensaje al usuario
            End If
        End If

        If Me.operacion = accion.modificar Then 'si la operacion es modificar:

            If dao.ActualizarBarrio(Me.txt_descripcion.Text, Me.cmb_localidades.SelectedValue, id_barr) = True Then
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "Barrio modificado con éxito."   'muestra un mensaje al usuario
            Else
                Me.lbl_mensaje.ForeColor = Color.Red
                Me.lbl_mensaje.Text = "No se pudo modificar el barrio"   'muestra un mensaje al usuario
            End If
        End If

        Me.txt_descripcion.Text = ""    'setea en blanco el campo
        Me.grupo.Text = ""
        Me.cmb_localidades.SelectedIndex = -1
        cargarGrilla()   'actualiza la visualizacion de la tabla con los nuevos valores modificados

    End Sub

    Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click

        Me.operacion = accion.modificar 'define el topo de operacion en curso
        'pregunta al usuario si desea eliminar
        If MessageBox.Show("¿Está seguro que desea Eliminar " & Me.grid_barrio.CurrentRow.Cells(1).Value & "?", "Eliminar Barrio", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            If dao.EliminarBarrio(Me.grid_barrio.CurrentRow.Cells(0).Value) = True Then
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "Barrio eliminado con éxito."    'muestra un mensaje al usuario
                Me.txt_descripcion.Text = ""    'setea en blanco el campo
                Me.cmb_localidades.SelectedIndex = -1
                cargarGrilla()   'actualiza la visualizacion de la tabla con los nuevos valores modificados
            Else
                Me.lbl_mensaje.ForeColor = Color.Red
                Me.lbl_mensaje.Text = "No se pudo borrar el barrio"    'muestra un mensaje al usuario
            End If


        End If
    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
        Me.operacion = accion.insertar  'modifica el estado de operacion
        Me.cmb_localidades.SelectedIndex = -1
        Me.btnEliminar.Enabled = False
        Me.txt_descripcion.Focus()  'centra el foco en la descripcion
        Me.lbl_mensaje.Text = ""    'borra el label de mensajes al usuario
        Me.grupo.Text = "Insertar Barrio"
    End Sub

    Private Sub cargarComboLocalidades() 'metodo que carga el combo localidades
        Me.acceso._tabla = "T_LOCALIDADES"
        Me.combo.cargar(Me.cmb_localidades, acceso.leo_tabla(), "ID_LOCALIDAD", "NOMBRE")
        Me.cmb_localidades.SelectedIndex = -1

    End Sub

    Private Sub cmd_insertarLoc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_insertarLoc.Click
        'metodo que llama al form Localidad
        Dim masLocalidades As New FrmLocalidad(Me)
        Me.Enabled = False 'bloquea el form barrios para que solo se pueda usar el form localidades
        masLocalidades.ShowDialog()
        Me.cargarComboLocalidades()
        Me.cargarGrilla()
    End Sub

    Private Sub FrmBarrios_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
        If vengoDesdeMenuPrincipal = True Then 'si vengo desde el menu ppal solo cierro la ventana
            Me.Dispose()
        Else 'si vengo de un form distinto al ppal
            Me.Close()  'cierra el formulario
            ventanaPadre.Enabled = True 'Habilita el form principal
            ventanaPadre.Focus()        'y le hace foco
        End If
    End Sub

    'voy filtrando a medida que escribo
    Private Sub txt_descripcion_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_descripcion.TextChanged
        grid_barrio.DataSource = dao.buscarBarrioXNombre(txt_descripcion.Text) 'voy filtrando en la grilla a medida que inserta el nombre

    End Sub

    Private Sub grid_barrio_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grid_barrio.CellDoubleClick
        operacion = accion.modificar
        txt_descripcion.Focus()
        id_barr = Integer.Parse(grid_barrio.CurrentRow.Cells(0).Value.ToString())
        Me.txt_descripcion.Text = Me.grid_barrio.CurrentRow.Cells(1).Value 'muestra el contenido del campo a modificar
        Me.cmb_localidades.SelectedValue = Me.grid_barrio.CurrentRow.Cells(2).Value
    End Sub
End Class